package com.aaa.rabbitmq.three;

import com.aaa.rabbitmq.one.util.RabbitMQUtil;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.MessageProperties;

import java.nio.charset.StandardCharsets;
import java.util.Scanner;

/**
 *
 * 生产者
 * 消费消息 在手动应答不丢失 放回队列重新消费
 * zhc
 */
public class Task02 {

    //队列名称
    public static final String TASK_QUEUE_NAME="ack_queue";

    //发消息
    public static void main(String[] args) throws Exception {
        Channel channel = RabbitMQUtil.getChannel();
        //开启发布确认  (想要数据不被丢失， 1，要求队列必须持久化，2，要求消息持久化，3开启发布确认)
        channel.confirmSelect();

        //是否持久化  (队列持久化 即使mq重启也会存在)
        boolean durable = true;
        //创建队列
        channel.queueDeclare(TASK_QUEUE_NAME,durable,false,false,null);

        //从控制台拿到消息发送上去
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()){
            String msg = scanner.next();
            //用信道 发消息    MessageProperties.PERSISTENT_TEXT_PLAIN->告诉mq将消息保存磁盘中
            channel.basicPublish("",TASK_QUEUE_NAME, MessageProperties.PERSISTENT_TEXT_PLAIN,msg.getBytes(StandardCharsets.UTF_8));
            System.out.println("生产者发送消息完成"+msg);
        }

    }
}
